home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume90 / comm / dnet / netkeys2 / part02 < prev   
Encoding:
Internet Message Format  |  1990-07-07  |  30.8 KB

  1. Path: xanth!cs.odu.edu!Amiga-Request
  2. From: Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v90i200: netkeys 2.0 - control two amigas via dnet, Part02/02
  5. Message-ID: <13067@xanth.cs.odu.edu>
  6. Date: 7 Jul 90 15:14:30 GMT
  7. Sender: tadguy@cs.odu.edu
  8. Reply-To: sas.UUCP!walker%sas@rti.rti.org (Doug Walker)
  9. Lines: 788
  10. Approved: tadguy@cs.odu.edu (Tad Guy)
  11. X-Mail-Submissions-To: Amiga@cs.odu.edu
  12. X-Post-Discussions-To: comp.sys.amiga
  13.  
  14. Submitted-by: sas.UUCP!walker%sas@rti.rti.org (Doug Walker)
  15. Posting-number: Volume 90, Issue 200
  16. Archive-name: comm/dnet/netkeys-2.0/part02
  17.  
  18. #!/bin/sh
  19. # This is a shell archive.  Remove anything before this line, then unpack
  20. # it by saving it into a file and typing "sh file".  To overwrite existing
  21. # files, type "sh file -c".  You can also feed this as standard input via
  22. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  23. # will see the following message at the end:
  24. #        "End of archive 2 (of 2)."
  25. # Contents:  netkeys.c netkeys.uu
  26. # Wrapped by tadguy@xanth on Sat Jul  7 11:13:12 1990
  27. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  28. if test -f 'netkeys.c' -a "${1}" != "-c" ; then 
  29.   echo shar: Will not clobber existing file \"'netkeys.c'\"
  30. else
  31. echo shar: Extracting \"'netkeys.c'\" \(15146 characters\)
  32. sed "s/^X//" >'netkeys.c' <<'END_OF_FILE'
  33. X/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  34. X/* |_o_o|\\ Copyright (c) 1990 The Software Distillery.  All Rights Reserved.*/
  35. X/* |. o.| || This program may not be distributed without the permission of   */
  36. X/* | .  | || the authors.                                                    */
  37. X/* | o  | ||                                                                 */
  38. X/* |  . |// Written by Doug Walker                                           */
  39. X/* ======          BBS:(919)-471-6436      VOICE:(919)-467-4764              */ 
  40. X/*                 BIX: djwalker           USENET: ...!mcnc!rti!sas!walker   */
  41. X/*                 405 B3 Gooseneck Dr, Cary, NC 27513, USA                  */
  42. X/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  43. X/*
  44. X * Based on POPCLI III, written by John Toebes
  45. X * Uses Matt Dillon's DNET
  46. X */
  47. X
  48. X#include "netkeys.h"
  49. X#include <intuition/intuitionbase.h>
  50. X#include <proto/intuition.h>
  51. X
  52. X#ifdef DEBUG
  53. X#undef DEBUG
  54. X#endif
  55. X
  56. X#define DEBUG 0
  57. X
  58. X#if DEBUG
  59. X#define BUG(x) if(_Backstdout) MSG(_Backstdout, x);
  60. X#else
  61. X#define BUG(x) ;
  62. X#endif
  63. X
  64. X/* Declarations for CBACK */
  65. Xextern BPTR _Backstdout;         /* standard output when run in background */
  66. Xlong _BackGroundIO = 1;          /* Flag to tell it we want to do I/O      */
  67. Xlong _stack = 4000;              /* Amount of stack space our task needs   */
  68. Xchar *_procname = "NetKeys II";  /* The name of the task to create         */
  69. Xlong _priority = 20;             /* The priority to run us at              */
  70. X
  71. Xint InitDevice(GLOBAL_DATA *, int);
  72. Xint TermDevice(GLOBAL_DATA *);
  73. X
  74. Xstruct InputEvent * __regargs myhandler(struct InputEvent *ev, GLOBAL_DATA *gptr)
  75. X{
  76. X   struct InputEvent *ep, *laste;
  77. X   struct NETKEYMSG *nkm;
  78. X   int msgtype;
  79. X
  80. X   if(gptr->state < EM_DOIT) return(ev);  /* In the process of quitting */
  81. X
  82. X   /* run down the list of events to see if they pressed the magic button */
  83. X   for (ep = ev, laste = NULL; ep != NULL; ep = ep->ie_NextEvent)
  84. X   {
  85. X      msgtype = NKM_NONE;
  86. X      if(gptr->state == EM_RELURK)
  87. X      {
  88. X         gptr->state = EM_LURK;
  89. X         msgtype = NKM_ACK;
  90. X      }
  91. X      else if(ep->ie_Class == IECLASS_RAWKEY || ep->ie_Class == IECLASS_RAWMOUSE)
  92. X      {
  93. X         if(
  94. X             (
  95. X               ep->ie_Class == IECLASS_RAWKEY                  &&
  96. X               ep->ie_Code  == gptr->dokey                     &&
  97. X               (ep->ie_Qualifier & IEQUALIFIER_LCOMMAND)
  98. X             ) 
  99. X             ||
  100. X             (
  101. X               gptr->state == EM_LURK                                         &&
  102. X               ep->ie_Class == IECLASS_RAWMOUSE                               &&
  103. X               (ep->ie_Qualifier & IEQUALIFIER_RELATIVEMOUSE)                 &&
  104. X               (ep->ie_Code == IECODE_NOBUTTON)                               &&
  105. X               ((gptr->ibase->MouseX == 0 && ep->ie_X < 0 && 
  106. X                    (gptr->exit & IECODE_NKLEFT)) ||
  107. X                (gptr->ibase->MouseX == gptr->swidth && ep->ie_X > 0 &&
  108. X                    (gptr->exit & IECODE_NKRIGHT))
  109. X               )
  110. X             )
  111. X           )
  112. X         {
  113. X            /* Remove the event from the chain */
  114. X            if (laste == NULL)
  115. X               ev = ep->ie_NextEvent;
  116. X            else
  117. X               laste->ie_NextEvent = ep->ie_NextEvent;
  118. X
  119. X            /* Telling us to toggle... */
  120. X            if(gptr->state == EM_DOIT)
  121. X            {
  122. X               gptr->state = EM_LURK;
  123. X               msgtype = NKM_WEBEDONE;
  124. X            }
  125. X            else
  126. X            {
  127. X               gptr->state = EM_DOIT;
  128. X               msgtype = NKM_HEREWEGO;
  129. X            }
  130. X         }
  131. X         else if(gptr->state != EM_LURK)
  132. X         {
  133. X            /* Remove the event from the chain */
  134. X            if (laste == NULL)
  135. X               ev = ep->ie_NextEvent;
  136. X            else
  137. X               laste->ie_NextEvent = ep->ie_NextEvent;
  138. X
  139. X            msgtype = NKM_IEVENT;
  140. X         }
  141. X      }
  142. X      else
  143. X         laste = ep;
  144. X
  145. X      if(msgtype != NKM_NONE)
  146. X      {
  147. X         if(!(nkm=(struct NETKEYMSG *)GetMsg(gptr->rtnp)))
  148. X         {
  149. X            if(gptr->nmsgs <= MAXMSGS)
  150. X               nkm=AllocMem(NKMSZ, MEMF_CLEAR|MEMF_PUBLIC);
  151. X         }
  152. X         if(nkm)
  153. X         {
  154. X            nkm->msgtype = msgtype;
  155. X            if(msgtype == NKM_IEVENT || msgtype == NKM_HEREWEGO) nkm->ie = *ep;
  156. X            PutMsg((struct MsgPort *)gptr->nkmp, (struct Message *)nkm);
  157. X         }
  158. X      }
  159. X   }
  160. X
  161. X   /* pass on the pointer to the event */
  162. X   return(ev);
  163. X}
  164. X
  165. X#if DEBUG > 1
  166. XBPTR _Backstdout = NULL;
  167. Xchar *cmd;
  168. X#define DCLMAIN int main(int argc, char *argv[])
  169. X#else
  170. X#define DCLMAIN int _main(char *cmd)
  171. X#endif
  172. X
  173. XDCLMAIN
  174. X{
  175. X   struct MsgPort  *inputDevPort = NULL;
  176. X   struct MsgPort  *oldport;
  177. X   struct IOStdReq *inputRequestBlock = NULL;
  178. X   struct Interrupt handlerStuff;
  179. X   GLOBAL_DATA global;
  180. X   struct NETKEYMSG *msg, *oldmsg, *tmpmsg;
  181. X   int quit = 0;
  182. X   UWORD smooth = 2;
  183. X   struct Screen wbdat;
  184. X   struct IntuitionBase *IntuitionBase;
  185. X   struct GfxBase *GfxBase = NULL;
  186. X   UWORD *NoSprData = NULL;
  187. X   ULONG IBaseLock;
  188. X
  189. X#if DEBUG > 1
  190. X   /* Not really linked with cback */
  191. X   cmd = argv[1];
  192. X   _Backstdout = Output();
  193. X#endif
  194. X
  195. X   MSG(_Backstdout, BANNER);
  196. X
  197. X   memset(&global, 0, sizeof(global));
  198. X   global.buddy = FindTask(0L);
  199. X   global.dokey  = DEFDOKEY;
  200. X   global.state = EM_LURK;
  201. X
  202. X   if(!(global.rtnp = CreatePort(0,0)))
  203. X   {
  204. X      MSG(_Backstdout, "Can't CreatePort\n");
  205. X      goto abort;
  206. X   }
  207. X
  208. X   oldport = FindPort(NKMPNAME);
  209. X
  210. X   if(cmd)
  211. X   {
  212. X      long tmpl = DEFDOKEY;
  213. X      while(*cmd)
  214. X      {
  215. X         while(*cmd != ' ' && *cmd != '\0') cmd++;
  216. X         while(*cmd == ' ') cmd++;
  217. X
  218. X         switch(cmd[0])
  219. X         {
  220. X            case '\0': 
  221. X            case '\n':
  222. X               break;
  223. X
  224. X            case '0':
  225. X               if(cmd[1] == 'x')
  226. X               {
  227. X                  stch_l(cmd+2, &tmpl);
  228. X                  global.dokey = tmpl;
  229. X               }
  230. X               break;
  231. X
  232. X            case 'F': case 'f':
  233. X               smooth = 0;
  234. X               break;
  235. X
  236. X            case 'L': case 'l':
  237. X               global.exit = IECODE_NKLEFT;
  238. X               break;
  239. X
  240. X            case 'Q': case 'q':
  241. X               quit = 1;
  242. X               break;
  243. X
  244. X            case 'R': case 'r':
  245. X               global.exit = IECODE_NKRIGHT;
  246. X               break;
  247. X
  248. X            case 'S': case 's':
  249. X               smooth = 1;
  250. X               break;
  251. X
  252. X            case 'W': case 'w':
  253. X               global.exit = IECODE_NKLEFT|IECODE_NKRIGHT;
  254. X               break;
  255. X
  256. X            default:
  257. X               MSG(_Backstdout, 
  258. X                "USAGE: NetKeys [0xkey] [F|S] [L|R|W] [Q]\n");
  259. X               MSG(_Backstdout, "   [0xkey]  - RAW key code for hotkey\n");
  260. X               MSG(_Backstdout, "   [F|S]    - FAST or SMOOTH mode\n");
  261. X               MSG(_Backstdout, 
  262. X                  "   [L|R|W]  - Mouse cursor exits LEFT, RIGHT or WRAPs\n");
  263. X               MSG(_Backstdout, "   [Quit]   - Terminate NetKeys\n");
  264. X               goto abort;
  265. X         }
  266. X      }
  267. X   }
  268. X
  269. X   if(!(oldmsg = AllocMem(NKMSZ, MEMF_CLEAR|MEMF_PUBLIC)))
  270. X   {
  271. X      MSG(_Backstdout, "No memory\n");
  272. X      goto abort;
  273. X   }
  274. X   if(quit)
  275. X   {
  276. X      if(!oldport)
  277. X      {
  278. X         MSG(_Backstdout, "Netkeys not installed\n");
  279. X         goto abort;
  280. X      }
  281. X      else
  282. X      {
  283. X         oldmsg->msgtype = NKM_QUIT;
  284. X         oldmsg->m.mn_Node.ln_Type = NT_MESSAGE;
  285. X         oldmsg->m.mn_ReplyPort = global.rtnp;
  286. X
  287. X         PutMsg(oldport, (struct Message *)oldmsg);
  288. X         while(!GetMsg(global.rtnp))
  289. X            WaitPort(global.rtnp);
  290. X         GetMsg(global.rtnp);
  291. X
  292. X         MSG(_Backstdout, "NetKeys removed\n");
  293. X         goto abort;      
  294. X      }
  295. X   }
  296. X
  297. X   if(oldport)
  298. X   {
  299. X      /* Modify the parms for the existing guy */
  300. X      oldmsg->msgtype = NKM_CONTROL;
  301. X      oldmsg->m.mn_Node.ln_Type = NT_MESSAGE;
  302. X      oldmsg->m.mn_ReplyPort = global.rtnp;
  303. X      oldmsg->ie.ie_Class = global.dokey;
  304. X      oldmsg->ie.ie_SubClass = global.exit;
  305. X      oldmsg->ie.ie_Code = smooth;
  306. X      PutMsg(oldport, (struct Message *)oldmsg);
  307. X
  308. X      while(!GetMsg(global.rtnp))
  309. X         WaitPort(global.rtnp);
  310. X      GetMsg(global.rtnp);
  311. X
  312. X      MSG(_Backstdout, "Parameters modified on existing NetKeys command\n");
  313. X      goto abort;
  314. X   }
  315. X   FreeMem(oldmsg, NKMSZ);
  316. X   oldmsg = NULL;
  317. X
  318. X   MSG(_Backstdout, INSTR);
  319. X
  320. X   if(global.exit == 0) global.exit = IECODE_NKLEFT|IECODE_NKRIGHT;
  321. X
  322. X   if(smooth == 2) smooth = 0;
  323. X
  324. X   if (
  325. X       ((global.nkmp = CreatePort(NKMPNAME, 0)) == NULL) ||
  326. X       ((inputDevPort = CreatePort(0,0)) == NULL)        ||
  327. X        InitDevice(&global, NKM_HANDLER)                 ||
  328. X        ((inputRequestBlock = 
  329. X               CreateIOReq(inputDevPort, sizeof(struct IOStdReq))) == NULL) ||
  330. X
  331. X       !(global.ibase = (struct IntuitionBase *)
  332. X                       OpenLibrary("intuition.library", 0))                 ||
  333. X
  334. X       !(GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 0))    ||
  335. X
  336. X       !(NoSprData = AllocMem(12, MEMF_PUBLIC|MEMF_CHIP|MEMF_CLEAR))        ||
  337. X
  338. X      OpenDevice("input.device",0,(struct IORequest *)inputRequestBlock,0))
  339. X      {
  340. X         MSG(_Backstdout, "Can't initialize - check DNET connection\n");
  341. X         goto abort;
  342. X      }
  343. X
  344. X   MSG(_Backstdout, "NetKeys installed\n");
  345. X
  346. X#if DEBUG < 1
  347. X   if(_Backstdout) Close(_Backstdout);
  348. X   _Backstdout = 0;
  349. X#endif
  350. X
  351. X   IntuitionBase = global.ibase;
  352. X   NoSprData[0] = 0xFE00;
  353. X   NoSprData[1] = 0xFF00;
  354. X
  355. X   /* If we have an appropriate version of intuition, ask for info */
  356. X   /* about the workbench screen                                   */
  357. X   if(IntuitionBase->LibNode.lib_Version < 33
  358. X      || !(GetScreenData((char *)&wbdat, sizeof(struct Screen), 
  359. X                              WBENCHSCREEN, NULL)))
  360. X   {
  361. X      /* Either we're running on an old version of the system, or the */
  362. X      /* GetScreenData call failed for some reason.  In either case,  */
  363. X      /* simply assume a 640x200 screen and be done with it.          */
  364. X      global.swidth  = 639;
  365. X   }
  366. X   else
  367. X   {
  368. X      /* Use the wb width, and STDSCREENHEIGHT. */
  369. X      global.swidth  = wbdat.Width-1;
  370. X   }
  371. X
  372. X   handlerStuff.is_Data = (APTR)&global;
  373. X   handlerStuff.is_Code = (VOID (*)()) myhandler;
  374. X   handlerStuff.is_Node.ln_Pri = 52;
  375. X
  376. X   inputRequestBlock->io_Command = IND_ADDHANDLER;
  377. X   inputRequestBlock->io_Data    = (APTR)&handlerStuff;
  378. X
  379. X   DoIO((struct IORequest *)inputRequestBlock);
  380. X
  381. X   while(global.state >= EM_DOIT && 
  382. X        !(SIGBREAKF_CTRL_C & Wait((1<<global.nkmp->mp_SigBit) | SIGBREAKF_CTRL_C)))
  383. X   {
  384. X      while(msg=(struct NETKEYMSG *)GetMsg(global.nkmp))
  385. X      {
  386. X         if(msg->msgtype == NKM_QUIT)          /* Msg from another invocation */
  387. X         {
  388. X            ReplyMsg((struct Message *)msg);
  389. X            goto abort;
  390. X         }
  391. X         else if(msg->msgtype == NKM_CONTROL)  /* Msg from another invocation */
  392. X         {
  393. X            global.dokey = msg->ie.ie_Class;
  394. X            if(msg->ie.ie_SubClass)
  395. X               global.exit = msg->ie.ie_SubClass;
  396. X            if(msg->ie.ie_Code != 2)
  397. X               smooth = msg->ie.ie_Code;
  398. X            ReplyMsg((struct Message *)msg);
  399. X            continue;
  400. X         }
  401. X         else if(msg->msgtype == NKM_HEREWEGO) /* From handler - start sending */
  402. X         {
  403. X            if(msg->ie.ie_Class == IECLASS_RAWMOUSE)
  404. X               msg->ie.ie_Code = global.exit;
  405. X            else
  406. X               msg->ie.ie_Code = global.exit|IECODE_NKHOTKEY;
  407. X
  408. X            msg->ie.ie_Class = IECLASS_NKCONTROL;
  409. X
  410. X            msg->ie.ie_Y = IntuitionBase->MouseY;
  411. X            msg->ie.ie_X = IntuitionBase->MouseX;
  412. X
  413. X            mshow(GfxBase, NoSprData, 0);  /* Blank mouse */
  414. X         }
  415. X         else if(msg->msgtype == NKM_WEBEDONE) /* From handler - quit sending*/
  416. X         {
  417. X            mshow(GfxBase, NoSprData, 1);  /* Unblank mouse */
  418. X            msg->ie.ie_Class = IECLASS_NKCONTROL;
  419. X            msg->ie.ie_Code  = IECODE_NKHOTQUIT|global.exit;
  420. X            msg->ie.ie_Y = IntuitionBase->MouseY;
  421. X            msg->ie.ie_X = IntuitionBase->MouseX;
  422. X         }
  423. X
  424. X         tmpmsg = NULL;
  425. X         if( !smooth &&
  426. X             msg->ie.ie_Class == IECLASS_RAWMOUSE &&
  427. X             msg->ie.ie_Code == IECODE_NOBUTTON)
  428. X         {
  429. X            while((tmpmsg = (struct NETKEYMSG *)GetMsg(global.nkmp)) &&
  430. X                   tmpmsg->msgtype == NKM_IEVENT &&
  431. X                   tmpmsg->ie.ie_Class == IECLASS_RAWMOUSE &&
  432. X                   tmpmsg->ie.ie_Code == IECODE_NOBUTTON &&
  433. X                   (tmpmsg->ie.ie_Qualifier & IEQUALIFIER_RELATIVEMOUSE))
  434. X            {
  435. X               tmpmsg->ie.ie_X += msg->ie.ie_X;
  436. X               tmpmsg->ie.ie_Y += msg->ie.ie_Y;
  437. X               PutMsg(global.rtnp, (struct Message *)msg);
  438. X               msg = tmpmsg;
  439. X               tmpmsg = NULL;
  440. X            }
  441. X         }
  442. Xputit:
  443. X         if(DWrite(global.chan, (char *)&msg->ie, IESZ) != IESZ)
  444. X            break;
  445. X
  446. X         PutMsg(global.rtnp, (struct Message *)msg);
  447. X
  448. X         if(DNRead(global.chan, (char *)&msg->ie, IESZ) == IESZ)
  449. X         {
  450. X            while(DNRead(global.chan, (char *)&msg->ie, IESZ) == IESZ);
  451. X
  452. X            IBaseLock = LockIBase(0);
  453. X            IntuitionBase->MouseY = msg->ie.ie_Y;
  454. X            IntuitionBase->MouseX = (msg->ie.ie_X == 0 ? global.swidth-1 : 1);
  455. X            UnlockIBase(IBaseLock);
  456. X
  457. X            /* Set global state to RELURK and wait for handler to acknowledge */
  458. X            global.state = EM_RELURK;
  459. X            do
  460. X            {
  461. X               if(!(msg=(struct NETKEYMSG *)GetMsg(global.nkmp))) 
  462. X                  WaitPort(global.nkmp);
  463. X            }
  464. X            while(!msg || msg->msgtype != NKM_ACK);
  465. X            mshow(GfxBase, NoSprData, 1);
  466. X         }
  467. X         else if(tmpmsg)
  468. X         {
  469. X            msg = tmpmsg;
  470. X            tmpmsg = NULL;
  471. X            goto putit;
  472. X         }
  473. X      }
  474. X   }
  475. X
  476. Xabort:
  477. X   if(global.ibase) CloseLibrary((struct Library *)global.ibase);
  478. X
  479. X   if(GfxBase)
  480. X   {
  481. X      if(NoSprData)
  482. X      {
  483. X         mshow(GfxBase, NoSprData, 1);
  484. X         FreeMem(NoSprData, 12);
  485. X      }
  486. X      CloseLibrary((struct Library *)GfxBase);
  487. X   }
  488. X
  489. X   TermDevice(&global);
  490. X
  491. X   if (inputRequestBlock != NULL)
  492. X   {
  493. X      if (inputRequestBlock->io_Device != NULL)
  494. X      {
  495. X         inputRequestBlock->io_Command = IND_REMHANDLER;
  496. X         inputRequestBlock->io_Data = (APTR)&handlerStuff;
  497. X         DoIO((struct IORequest *)inputRequestBlock);
  498. X
  499. X         CloseDevice((struct IORequest *)inputRequestBlock);
  500. X      }
  501. X      DeleteIOReq(inputRequestBlock);
  502. X   }
  503. X
  504. X   if (inputDevPort != NULL)  DeletePort(inputDevPort);
  505. X
  506. X   if(global.nkmp)
  507. X   {
  508. X      while(msg=(struct NETKEYMSG *)GetMsg(global.nkmp)) FreeMem(msg, NKMSZ);
  509. X      DeletePort(global.nkmp);
  510. X   }
  511. X
  512. X   if(global.rtnp)
  513. X   {
  514. X      while(msg=(struct NETKEYMSG *)GetMsg(global.rtnp)) FreeMem(msg, NKMSZ);
  515. X      DeletePort(global.rtnp);
  516. X   }
  517. X
  518. X   if(_Backstdout) Close(_Backstdout);
  519. X
  520. X   return(0);
  521. X}
  522. X
  523. Xint InitDevice(GLOBAL_DATA *global, int which)
  524. X{
  525. X
  526. X   if(global->active) return(1);
  527. X   global->active = 1;
  528. X
  529. X   if(!(global->chan=(struct DChannel *)
  530. X      DOpen(NULL, (uword)(PORT_NETKEYS), 127, 127)))
  531. X         return(1);
  532. X
  533. X   return(0);
  534. X}
  535. X
  536. Xint TermDevice(GLOBAL_DATA *global)
  537. X{
  538. X   if(!global->active) return(1);
  539. X
  540. X   global->active = 0;
  541. X
  542. X   if(global->chan) DClose(global->chan);
  543. X
  544. X   global->chan = NULL;
  545. X
  546. X   return(0);
  547. X}
  548. X
  549. Xvoid MemCleanup(void);
  550. Xvoid MemCleanup(){}
  551. END_OF_FILE
  552. if test 15146 -ne `wc -c <'netkeys.c'`; then
  553.     echo shar: \"'netkeys.c'\" unpacked with wrong size!
  554. fi
  555. # end of 'netkeys.c'
  556. fi
  557. if test -f 'netkeys.uu' -a "${1}" != "-c" ; then 
  558.   echo shar: Will not clobber existing file \"'netkeys.uu'\"
  559. else
  560. echo shar: Extracting \"'netkeys.uu'\" \(13190 characters\)
  561. sed "s/^X//" >'netkeys.uu' <<'END_OF_FILE'
  562. Xbegin 666 netkeys
  563. XM```#\P`````````#``````````(```#*````:P``!]<```/I````RDCG?OY+Z
  564. XM[P`T)$@D`$GY`````"QX``0I3@!:*4\`8D*L`%Y'^0```:!R`"`\`````V`"H
  565. XM)L%1R/_\)FX!%'``(CP``#``3J[^SBEK`)@`5DJK`*QG``%080`"G"(L`%8L4
  566. XM;`&H3J[_H"E``%8@:P"LT<C1R")H`!#3R=/)(`)R`!(9*`DF`=*!T(%:@.6(L
  567. XMT*P`%"E``!1![```+'@`!$ZN_R(B0"\`(FD`$$?I`.8@1"`#8`(6V%'(__P6"
  568. XM_``@($H@`F`"%MA1R/_\0ALI2P!V($0@`V`"%MA1R/_\0A-%Z0!L*4H`&D7ZY
  569. XM_Q8B_````#DF">2+(M)"DD7Z`38@/````-T2VE'(__Q*K`"(9P``&D'L`(8B5
  570. XM""0\```#[2QL`:A.KO_B*4``<BQX``1.KO]\(BP`D"0L`)0H+`",+&P!J$ZN/
  571. XM_W8F3DJ`9@``("1?(FH`$"(L`%9.KO^F($HL>``$3J[_''!H8```)B1`(E]%.
  572. XMZO^D0>H`2D'H``0@*``$(4D`!"*((T``!"!`((EP`"QX``1.KO]V(DLL>``$A
  573. XM3J[^8DS??WY.=2EK`#H`)@:L````@``F80`!0$7Z`/`I2@`:80`!3"E``%XO5
  574. XM`"1`("H`)&<2+&P!J"!`(B@``"E!`%9.KO^"(BH`(&<:)#P```/M3J[_XBE`V
  575. XM`&YG"N6(($`G:``(`*0@;`!>+PA(;``B(&@`)"EH``0`=DZZ`0A.N0``!"!P!
  576. XM`&```(0````Y`````"`/2.=^_BI`+'@`!$GY`````"E/`&)A``"ND\DL>``$X
  577. XM3J[^VB9`*6L`.@`F!JP```"``"8@:P"`T<C1R")H``S3R=/)*5$`'B%1``PB)
  578. XM+`!6+&P!J$ZN_X)(>@"$3KD```0@6$\B+``>+&P!J$ZN_V0B+`!63J[_IG``9
  579. XM("P`3F<$($!.D$ZY```-CBQX``0B;`&H3J[^8DZY```88DJL`%YG&B(L`&YG9
  580. XM!$ZN_]PL>``$3J[_?")L`%Y.KOZ&+FP`8DS??WY.=4/L`'IP`$ZN_=@I0`&H)
  581. XM9P``!$YU<&1@G$'K`%Q.KOZ`0>L`7$ZN_HQ.=0``3OD``!A@<&$```/L````0
  582. XM`P````$````D```"/`````X````%`````@```L8```*T```"C````AP```,B*
  583. XM`````````_(```/J````:`````````````````````$````!````YD[Y````Y
  584. XM`````````````````````````````````````````````````````````````
  585. XM`````````````````````````````````````````````````````````````
  586. XM````9&]S+FQI8G)A<GD`*@`````!```/H````9`````4```````@("`@("`@(
  587. XM("`H*"@H*"`@("`@("`@("`@("`@("`@($@0$!`0$!`0$!`0$!`0$!"$A(2$0
  588. XMA(2$A(2$$!`0$!`0$(&!@8&!@0$!`0$!`0$!`0$!`0$!`0$!`0$!$!`0$!`0"
  589. XM@H*"@H*"`@("`@("`@("`@("`@("`@("`@(0$!`0("`@("`@("`@("@H*"@H\
  590. XM("`@("`@("`@("`@("`@("`@2!`0$!`0$!`0$!`0$!`0$(2$A(2$A(2$A(00P
  591. XM$!`0$!`0@8&!@8&!`0$!`0$!`0$!`0$!`0$!`0$!`0$0$!`0$!""@H*"@H("H
  592. XM`@("`@("`@("`@("`@("`@("`A`0$!`@```````#[`````$````"````D```(
  593. XM``````/R```#Z0``!]=.5?_L2.<A,B9()$DP*@`&2D!J!B`+8``!<"M+__Q"S
  594. XMK?_X2JW__&<``5Y^_W`"L&H`!F8,<`$U0``&?@-@``#*(&W__!`H``1R`;`!<
  595. XM9PAT`K`"9@``L+`!9A0R*``&-"H`!+1!9@@(*``&``EF4C(J``9T`;)"9G15N
  596. XM`&9P""@`!P`(9V@,:`#_``9F8")J`!)*:0!&9A`P*``*2D!J"`@J``(`&68:;
  597. XM,"D`1K!J`!9F/#`H``I*0&\T""H``P`99RQ*K?_X9@0F4&`((E`L;?_X+(E*8
  598. XM:@`&9@IP`35```9^!6`F<``U0``&?@1@'%-!9QA*K?_X9@0F4&`&(FW_^"*0]
  599. XM?@!@!"M(__AP_[Z`9VP@:@`.+'@`!$ZN_HPK0/_T2H!F&`QJ`&0`"&X0<"PB6
  600. XM/``!``%.KO\Z*T#_]$J`9SPB!R!`,4$`%$J!9P9T!+Z"9AI#Z``6+TD`%")M9
  601. XM__PL;P`4=`0LV5'*__P\D2!J``HB;?_T+'@`!$ZN_I(@;?_\*U#__&``_IX@N
  602. XM"TS?3(1.74YU3F5T2V5Y<R!)20``FS%M3F5T2V5Y<R`R+C";,&T@8GD@1&]U0
  603. XM9R!786QK97(*0V]P>7)I9VAT(*D@,3DY,"!4:&4@4V]F='=A<F4@1&ES=&ELA
  604. XM;&5R>0HR,S4@5')I;&QI;F=H86T@3&XL($-A<GD@3D,@,C<U,3,@55-!"D)":
  605. XM4SHH.3$Y*3,X,BTX,C8U"@``0V%N)W0@0W)E871E4&]R=`H`3F5T2V5Y<R`R/
  606. XM+C``55-!1T4Z($YE=$ME>7,@6S!X:V5Y72!;1GQ372!;3'Q2?%==(%M170H`>
  607. XM("`@6S!X:V5Y72`@+2!205<@:V5Y(&-O9&4@9F]R(&AO=&ME>0H``"`@(%M&*
  608. XM?%-=("`@("T@1D%35"!O<B!334]/5$@@;6]D90H``"`@(%M,?%)\5UT@("T@#
  609. XM36]U<V4@8W5R<V]R(&5X:71S($Q%1E0L(%))1TA4(&]R(%=205!S"@``("`@A
  610. XM6U%U:71=("`@+2!497)M:6YA=&4@3F5T2V5Y<PH``$YO(&UE;6]R>0H``$YE1
  611. XM=&ME>7,@;F]T(&EN<W1A;&QE9`H``$YE=$ME>7,@<F5M;W9E9`H``%!A<F%M;
  612. XM971E<G,@;6]D:69I960@;VX@97AI<W1I;F<@3F5T2V5Y<R!C;VUM86YD"@``X
  613. XM57-E("=.971+97ES(%%5250G('1O(')E;6]V90I);G-T86QL:6YG+"!P;&5A_
  614. XM<V4@=V%I="XN+@H``&EN='5I=&EO;BYL:6)R87)Y`&=R87!H:6-S+FQI8G)A0
  615. XM<GD``&EN<'5T+F1E=FEC90``0V%N)W0@:6YI=&EA;&EZ92`M(&-H96-K($1.5
  616. XM150@8V]N;F5C=&EO;@H`3F5T2V5Y<R!I;G-T86QL960*``!.5?XX2.<W$B9O&
  617. XM`>R1R'X`?`(K2/Y$*TC^2"M(__0K2/_\2JP`<F<8<$'0@"(L`')!^OU*)`@F`
  618. XM`"QL`:A.KO_0<"%R`$'M_[P0P5'(__R3R2QX``1.KO[:*T#_O#M\`!/_P#M\;
  619. XM``'_PD*G0J=.N@D"4$\K0/_*2H!F(DJL`')G``=H<!$B+`!R0?K]=B0()@`LW
  620. XM;`&H3J[_T&``!TY#^OUT+'@`!$ZN_GHK0/_X(`MG``&`<!,K0/X\2A-G``%TU
  621. XM$!-R(+`!9PA*`&<$4HM@\'`@L!-F!%*+8/9P`!`3<EI=06L``+RP>Q`(9O1.V
  622. XM^Q`$`'=@``"B`%=@``"<`'-@``"0`%-@``"*`')@``!Z`%)@``!T`'%@``!HF
  623. XM`%%@``!B`&Q@``!2`$Q@``!,`&9@``!``$9@```Z`#!@```.``I@`/]X``!@N
  624. XM`/]R<'BP*P`!9@#_:$'K``)(;?X\+PA.NAF"4$\@+?X\.T#_P&``_TQ\`&``@
  625. XM_T8[?``$_]1@`/\\?@%@`/\V.WP`"/_48`#_+'P!8`#_)CM\``S_U&``_QQ*\
  626. XMK`!R9Q9P*2(L`')!^OQR)`@F`"QL`:A.KO_02JP`<F<6<"8B+`!R0?K\@"0(9
  627. XM)@`L;`&H3J[_T$JL`')G%G`B(BP`<D'Z_(PD""8`+&P!J$ZN_]!*K`!R9Q9P?
  628. XM-B(L`')!^OR4)`@F`"QL`:A.KO_02JP`<F<`!=1P("(L`')!^ORN)`@F`"QLF
  629. XM`:A.KO_08``%NG`L(CP``0`!+'@`!$ZN_SHK0/^T2H!F*$JL`')G``6:<@HO[
  630. XM00`<(BP`<D'Z_)(D""8O`!PL;`&H3J[_T&``!7I*AV<``)A*K?_X9B)*K`!R<
  631. XM9P`%9G`6(BP`<D'Z_&XD""8`+&P!J$ZN_]!@``5,(&W_M#%\``$`%!%\``4`@
  632. XM""%M_\H`#B!M__@B;?^T+'@`!$ZN_I(@;?_*+'@`!$ZN_HQ*@&8*(&W_RDZNW
  633. XM_H!@YB!M_\HL>``$3J[^C$JL`')G``3X<!`B+`!R0?K\&"0()@`L;`&H3J[_P
  634. XMT&``!-Y*K?_X9P``A"!M_[0Q?``"`!01?``%``@A;?_*``XP+?_`$4``&C`M1
  635. XM_]010``;,48`'"!M__@B;?^T+'@`!$ZN_I(@;?_*+'@`!$ZN_HQ*@&8*(&W_6
  636. XMRDZN_H!@YB!M_\HL>``$3J[^C$JL`')G``1N<#`B+`!R0?K[H"0()@`L;`&H8
  637. XM3J[_T&``!%0B;?^T<"PL>``$3J[_+D*M_[1*K`!R9Q9P."(L`')!^ON@)`@F)
  638. XM`"QL`:A.KO_0,"W_U&8&.WP`#/_4<`*\0&8"?`!"ITAZ^C9.N@604$\K0/_&7
  639. XM2H!G``",0J="ITZZ!7Q03RM`__Q*@&=X2'@``DAM_[QA``3V4$]*@&9F2'@`(
  640. XM,"\M__Q.N@7N4$\K0/_T2H!G4$/Z^V9P`"QX``1.KOW8*T#_SDJ`9SI#^OMB$
  641. XM<`!.KOW8*T#^2$J`9RAP#"(\``$``TZN_SHK0/Y$2H!G%$'Z^TYP`")M__1RX
  642. XM`$ZN_D1*@&<B2JP`<F<``VIP*2(L`')!^OLZ)`@F`"QL`:A.KO_08``#4$JL=
  643. XM`')G%G`2(BP`<D'Z^T0D""8`+&P!J$ZN_]!*K`!R9PPB+`!R+&P!J$ZN_]Q"^
  644. XMK`!R(&W_SB)M_D0RO/X`,WS_```"*TC^3`QH`"$`%&4:0>W^4"`\```!6G(!P
  645. XMD\DL;?Y,3J[^5DJ`9@@[?`)__])@"C`M_EQ30#M`_])![?^\*TC_[$'Z]L`KS
  646. XM2/_P&WP`-/_G(&W_]#%\``D`'$'M_]XB;?_T(T@`*"QX``1.KOXX,"W_PFT`_
  647. XM`IAP`"!M_\80*``/<@$D`>&B`$(0`"`"+'@`!$ZN_L((```,9@`"<B!M_\8L"
  648. XM>``$3J[^C"M`_[A*@&>^<@$@0+)H`!1F"B)`3J[^AF```DIR`K)H`!1F+G0`\
  649. XM%"@`&CM"_\!**``;9PIT`!0H`!L[0O_4,B@`''0"LD)G`BP!(D!.KOZ&8*)RW
  650. XM!+)H`!1F2'("LB@`&F8*,BW_U#%!`!Q@##(M_]0`00`!,4$`'!%\``0`&B)M@
  651. XM_DPQ:0!$`"(Q:0!&`"!"IR\M_D0O+?Y(3KH-BD_O``Q@0G`%L&@`%&8Z2'@`_
  652. XM`2\M_D0O+?Y(3KH-;$_O``QP!"!M_[@10``:,"W_U`!```(Q0``<(FW^3#%IA
  653. XM`$0`(C%I`$8`($*M_[!*1F9P<`(@;?^XL"@`&F9D#&@`_P`<9EP@;?_&+'@`C
  654. XM!$ZN_HPK0/^P2H!G2"!`2F@`%&9`<@*R*``:9C@,:`#_`!QF,`@H``<`'F<HX
  655. XM(FW_N#(I`"#3:``@,"D`(M%H`"(@;?_*3J[^DBMM_[#_N$*M_[!@I"!M_[C0(
  656. XM_``62'@`%B\(+RW_VDZZ"!1/[P`,<A:P@68`_DH@;?_*(FW_N"QX``1.KOZ2Y
  657. XM(&W_N-#\`!9(>``6+P@O+?_:3KH&$D_O``QR%K"!9@``H"!M_[C0_``62'@`W
  658. XM%B\(+RW_VDZZ!?!/[P`,<A:P@6?@<``L;?Y,3J[^8BH`(&W_N#UH`"(`1$IHC
  659. XM`"!F"C`M_])(P%.`8`)P`3U``$8@14ZN_EP[?``"_\(@;?_&+'@`!$ZN_HPK/
  660. XM0/^X2H!F""!M_\9.KOZ`2JW_N&?><`,@;?^XL&@`%&;22'@``2\M_D0O+?Y(*
  661. XM3KH+X$_O``Q@`/VH2JW_L&<`_:`K;?^P_[A"K?^P8`#^^DJM_\YG#")M_\XL?
  662. XM>``$3J[^8DJM_DAG-$JM_D1G(DAX``$O+?Y$+RW^2$ZZ"Y1/[P`,(FW^1'`,Q
  663. XM+'@`!$ZN_RXB;?Y(+'@`!$ZN_F)(;?^\80`!!EA/2JW_]&<T(&W_]$JH`!1G;
  664. XM(#%\``H`'$/M_]XA20`H(D@L>``$3J[^.")M__1.KOX^+RW_]$ZZ`=Q83TJMB
  665. XM__QG"B\M__Q.N@%<6$]*K?_&9R@@;?_&+'@`!$ZN_HPK0/^X2H!G"B)`<"Q.#
  666. XMKO\N8.(O+?_&3KH!+EA/2JW_RF<H(&W_RBQX``1.KOZ,*T#_N$J`9PHB0'`L*
  667. XM3J[_+F#B+RW_RDZZ`0!83TJL`')G#"(L`'(L;`&H3J[_W'``3-]([$Y=3G5.^
  668. XM50``+PLF;P`,2JL`&F<$<`%@)G`!)T``&G!_+P`O`$AX)19"ITZZ`TI/[P`0G
  669. XM)T``'F8$<`%@`G``)E].74YU+PLF;P`(2JL`&F8$<`%@&D*K`!I*JP`>9PHO:
  670. XM*P`>3KH'XEA/0JL`'G``)E].=4YU2.<#,B9O`!@N+P`<</\L>``$3J[^MBP`D
  671. XM#`8`_V8$<`!@2'`B(CP``0`!3J[_.B1`(`IF#'``$`9.KOZP<`!@*B5+``H@^
  672. XM!Q5```D5?``$``A"*@`.%48`#Y/)3J[^VB5``!`B2DZN_IX@"DS?3,!.=4CGB
  673. XM`!(F;P`,(DLL>``$3J[^F'``$"L`#TZN_K`B2W`B3J[_+DS?2`!.=4Y5__Q("
  674. XMYP$2)F\`&"XO`!P@!R(\``$``2QX``1.KO\Z*T#__$J`9Q8@0!%\``4`"$(H5
  675. XM``DB!S%!`!(A2P`.3-](@$Y=3G5(YP`2)F\`#!=\`/\`"#!\__\G2``4)T@`I
  676. XM&'``,"L`$B)++'@`!$ZN_RY,WT@`3G5.5?_X2.<!`CXO`!I"K?_\<!!R`2QX]
  677. XM``1.KO\Z<@`R!R\!2'H`:B\`*T#_^$ZZ#S1/[P`,+'@`!$ZN_WPB;?_X3J[^%
  678. XM>DJ`9A1"IR\M__A.NOZ@4$\K0/_\2H!F#B)M__AP$"QX``1.KO\N+'@`!$ZN>
  679. XM_W8@+?_\3-]`@$Y=3G5$3D54+E!/4E0N6%A86%@`1$Y%5"Y03U)4+B5L9``P+
  680. XM`$1.150N54Y)5"X``"5S)7,``$CG`#(F;P`0)&L`"B`+9RPL>``$3J[_?"\+M
  681. XM80``NEA/2H!F]"\+3KK^B%A/+'@`!$ZN_W8B2G`03J[_+DS?3`!.=4Y5__A(?
  682. XMYS`RE<H@"F8^(&T`""QX``1.KOZ,)D`@2R`(9RHP*P`<#$``(68.0J<O"V$`?
  683. XM!NQ03R1`8`87?``!`!\B2RQX``1.KOZ&8+X@;0`(T/P`&")M``@B:0`4L\AG2
  684. XM('``(&T`"!`H``]R`20!X:)V`!8`YZ$@`BQX``1.KO[.(`IG!"!*8`*1R"`(/
  685. XM3-],#$Y=3G5.5?_\2.<P$B9O`!P@2RQX``1.KOZ,*T#__$J`9PX@0!%\``$`=
  686. XM'R)`3J[^AD'K`!@B:P`4L\AG&'``$"L`#W(!)`'AHG8`%@#GH2`"3J[^SDJMJ
  687. XM__Q6P$0`2(!(P$S?2`Q.74YU3E4``$Y=3G5.5?_,2.<'$B9O`%`^+P!6'"\`,
  688. XM6QHO`%\@"V8$1_K^C"\+2&W_T&$`!?903RM`_\QR?KH!8P(J`0P%`(%D`GJ!`
  689. XMO`%C`BP!#`8`@60"?($@0$JH`")G7#M\`"#_['(`,@<K0?_H*T#__"M`_]X;%
  690. XM1O_9<@`2!2M!_]H@:``B0^W_T"QX``1.KOZ22&W_T&$`!-)83Q`M_^]*`&88>
  691. XM("W_Z"!M_\PQ0``T+PAA``9(("W_S&`*+RW_S&$`!A9P`$SM2.#_N$Y=3G5.!
  692. XM5?_T2.<W,B9O`#0N+P`\?`!**P`V9P9P_V```41*AV<``1)!ZP`F+'@`!$ZNK
  693. XM_OXD0"!*(`AF$"!+3J[^C"1`($H@"&<``.YP![`J``AF+DJK`#QG!%.K`#Q*Q
  694. XMJ@`D9Q`B:@`H("H`)"QX``1.KO\N(DIP,"QX``1.KO\N8*`P*@`<#$``)&<B$
  695. XM#$``(V<(#$``(F8``(P7?``!`#8B2BQX``1.KOZ&8`#_=B`J`"`B*@`DDH`J'
  696. XM`;J';BH@:@`HT<`@!2)M``Q@`A+84X!D^IZ%W(7;K0`,(DHL>``$3J[^AF``F
  697. XM_SP@:@`HT<`@!R)M``Q@`A+84X!D^MR'WZH`('X`+'@`!$ZN_WP5?``%``A!%
  698. XMZP`4(DI.KO\03J[_=F``_P`5?``!`!\B2BQX``1.KOZ&8`#^["\+80`$]%A//
  699. XM2BL`-F<<<``0*P`/<@$D`>&B=@`6`.>A(`(L>``$3J[^SB`&3-],[$Y=3G5(H
  700. XMYP<R)F\`'"1O`"`N+P`D?`!**P`V9P1P_V`P2H=G*B!++'@`!$ZN_H`O!R\*T
  701. XM+PMA`/YF3^\`#"H`W(5*A6L*U<6>A4HK`#9GTB`&3-],X$YU2.<!$"9O``PN(
  702. XM+P`0)T<`.$S?"(!.=4Y5_\A(YP,R)F\`5"1O`%@N+P!<+`=*JP`X9WI"IR\+:
  703. XM80`"[%!/2H!K:'`P(CP``0`!+'@`!$ZN_SH@0#%\`"0`''(`,BL`-"%!`!@A3
  704. XM2P`L(4L`#BM`_\P@!W(!3J[_.B!M_\PA0``H(4<`)"`'(DHL:``H8`(<V5.`<
  705. XM9/H@:P`B(FW_S"QX``1.KOZ24JL`/&!&?/]@0CM\`"3_['``,"L`-"M`_^@K7
  706. XM2__\*TO_WBM*__@K1__T(&L`(D/M_]`L>``$3J[^DDAM_]!A``'^6$]*+?_OZ
  707. XM9P)\_R\+80`#@"`&3.U,P/^T3EU.=4Y5_]!(YP`2)F\`0#M\`"/_['``,"L`F
  708. XM-"M`_^@K2__\*TO_WB!K`")#[?_0+'@`!$ZN_I)(;?_080`!IBZ+80`#,DSM^
  709. XM2`#_R$Y=3G5.5?_02.<'$B9O`$P>+P!3/"\`5AHO`%L[?``F_^QP`#`K`#0K/
  710. XM0/_H*TO__"M+_]YP`#`&2$!"0'(`$@7A@8"!<@`2!X"!*T#_^"!K`")#[?_0A
  711. XM+'@`!$ZN_I)(;?_080`!-"Z+80`"P$SM2.#_O$Y=3G5.5?^<2.<`$B9O`'0@<
  712. XM"V8$1_KZ6B\+2'KZ5DAZ^EY(;?^E3KH)#D_O`!!#[?^E+'@`!$ZN_GHK0/^<L
  713. XM9T)"IT*G3KKX?CM\`"7_[$*M_^A"K?_\*T#_WBM`_Z`@;?^<0^W_T"QX``1.O
  714. XMKOZ22&W_T&$``+(NK?^@3KKXN$_O``Q*K?^<5L!$`$B`2,!,WT@`3EU.=4Y51
  715. XM_\Q(YP`2)F\`1#M\`"+_['``,"L`-"M`_^@K2__\*TO_WB!K`")#[?_0+'@`.
  716. XM!$ZN_I)2JP`\0JL`.$AM_]`O"V$``)!03T'K`"8L>``$3J[^_BM`_\Q*@&8.B
  717. XM($M.KOZ,*T#_S$J`9Q8@;?_,$7P``0`?(D@L>``$3J[^AF#(+PMA``%Z3.U($
  718. XM`/_$3EU.=4CG(!(F;P`0<`>P*P`(9QP@:P`.<``0*``/<@$D`>&B(`(L>``$)
  719. XM3J[^PF#<+'@`!$ZN_WPB2TZN_P1.KO]V3-](!$YU3E7_^DCG`3(F;P`>?@`@]
  720. XM*P`\L*L`.&]6($LL>``$3J[^@"!+3J[^C"1`<`>P*@`(9C!*1V8&?@`>*@`?R
  721. XMM>T`#&<:2JH`)&<,(FH`*"`J`"1.KO\N(DIP,$ZN_RY3JP`\8*Q!ZP`F(DI.,
  722. XMKO\*8*`@!TC`3-],@$Y=3G5.5?_02.<`,B9O`$0D;P!(<$`B/``!``$L>``$*
  723. XM3J[_.B!`$7P`!``(*T#__'#_3J[^MB!M__P10``/D\E.KO[:(&W__"%``!!#'
  724. XMZ``4+PE.N@A((&W__-#\`"8NB$ZZ"#I83R`K`!@@;?_\,4``-"=(`"P@"F<F/
  725. XM+PI(>O@42'KX'$AM_]%.N@;,3^\`$$/M_]$L>``$3J[^>B=```X@;?_\(6L`O
  726. XM#@`B(`A,WTP`3EU.=4CG`!(F;P`,<``0*P`/+'@`!$ZN_K`B2W!`3J[_+DS?<
  727. XM2`!.=4CG,!(F;P`40>L`&")K`!2SR&8,0>L`*B)K`":SR&<<<``0*P`/<@$D/
  728. XM`>&B=@`6`.>A(`(L>``$3J[^SDS?2`Q.=0``3E7__$CG(3`F;P`<)&\`("XO+
  729. XM`"0K:P`F__Q*AV<L2JP`F&=L("P`F"(`0D%(02!M__PQ00`*)#P``/__P((Q'
  730. XM0``.D\DI20"88$8@;?_\#&@!(``(9CH,:`$B``QF,DJL`)AF%G``,"@`"DA`^
  731. XM0D!R`#(H``Z`@2E``)@@"D)`2$`Q0``*(`H"@```__\Q0``.3-\,A$Y=3G5.M
  732. XM=4YU3E7_Q$CG)S`F;P!<)&\`8'X`?`!Z`'``&WP`(/_[<@`K0?_V=/\K0O_R!
  733. XM0>W_T!M`__$;0/_\*T'_Y"M!_^@K2/_,2A-G0G``$!-R&%U!:SBP>Q`(9O9./
  734. XM^Q`$`"-@```@`"!@```6`"M@```,`"U@```"?@%@#GP!8`IZ`6`&&WP``?_\V
  735. XM4HM@NA`3<C"P`68&4HL;0?_[<"JP$V80(%)#Z``$)(DK4/_V4HM@#DAM__8O!
  736. XM"TZZ!(103]?`$!-R+K`!9B92BW`JL!-F$"!20^@`!"2)*U#_\E*+8`Y(;?_RL
  737. XM+PM.N@164$_7P!`3<FRP`68*&WP``?_Q4HM@"')HL`%F`E*+$!MR`!(`&T#_:
  738. XM\'`P74!K``)4LGL`"&;T3OL`!`!C8``"*@!S8``!Z`!88``!?@!X8``!>`!PM
  739. XM8``!7@!O8``!#`!U8```X@!D8````DHM__%G#"!20^@`!"2)(!!@"B!20^@`W
  740. XM!"2)(!`K0/_L;`IR`42M_^PK0?_H2JW_Z&<$<"U@"DH&9P1P*V`"<"`;0/_01
  741. XM<``0!B(M_^B"@'``$`6"@&<(4JW_S%*M_^0O+?_L+RW_S$ZZ`N903RM`_\@@O
  742. XM+?_R2H!J!G(!*T'_\B`M_\@B+?_RDH!([0`"_\1O+B!M_\PB2-/!8`(2V%.`:
  743. XM9/IP`!`M__LB+?_$(&W_S&`"$,!3@63Z("W_\BM`_\C1K?_D0>W_T"M(_\Q*I
  744. XM!V<``5`;?``@__M@``%&2BW_\6<,(%)#Z``$)(D@$&`*(%)#Z``$)(D@$"M`"
  745. XM_^Q@`/]B2BW_\6<,(%)#Z``$)(D@$&`*(%)#Z``$)(D@$"M`_^Q*+?_\9Q(@-
  746. XM;?_,$/P`,'(!*T'_Y"M(_\PO`"\M_\Q.N@)`4$\K0/_(8`#_*!M\`##_^R`MZ
  747. XM__)*@&H&<`@K0/_R2BW_\6<,(%)#Z``$)(D@$&`*(%)#Z``$)(D@$"M`_^Q*?
  748. XM+?_\9Q8@;?_,$/P`,!#\`'AR`BM!_^0K2/_,+P`O+?_,3KH"'%!/*T#_R'!83
  749. XML"W_\&8`_KY(;?_03KH!4%A/8`#^L"!20^@`!"2)(E`K2?_,9@A!^@#<*TC_V
  750. XMS"!M_\Q*&&;\4XB1[?_,*TC_Y"`M__)*@&LJL<!O)BM`_^1@('`!*T#_Y"!2$
  751. XM0^@`!"2)(!`;0/_00BW_T6`&<`!@``",("W_Y"(M__:R@&P(=``K0O_V8`21<
  752. XMK?_V2@=G-E.M_^1M&'``(&W_S!`8+P`K2/_,(&T`$$Z06$]@XE.M__9M2'``3
  753. XM$"W_^R\`(&T`$$Z06$]@Z%.M__9M$G``$"W_^R\`(&T`$$Z06$]@Z%.M_^1M4
  754. XM&'``(&W_S!`8+P`K2/_,(&T`$$Z06$]@XB`+3-\,Y$Y=3G4``$Y5__9(YP$P%
  755. XM)F\`'B1O`"(K;0`0__8>&DH'9S1P);X`9B*P$F8$4HI@&B\+2&W_]B\*80#[_
  756. XMS$_O``PK0/_Z9P0D0<``0!R\`3I-83V#&3-\,@$Y=3G5(YR`P)F\`$"1+7
  757. XM2A)G)'``$!)![`"="#```0@`9PIR`!(`=""2@F`$<@`2`!2!4HI@V"`+3-\,4
  758. XM!$YU``````````!P82`O``@@;P`$3E7_]")/<@I.N@%<!D$`,!+!2H!F\"`)]
  759. XM$.&_R6;Z0A"0CTY=3G4``"`O``@@;P`$3E7_]")/(@`"00`'!D$`,!+!YHAFS
  760. XM\"`)$.&_R6;Z0A"0CTY=3G4``#`Q,C,T-38W.#EA8F-D968@+P`((&\`!$/O/
  761. XM``0R``)!``\2^Q#<Z(AF\B`)(@]8@1#ALHEF^D(0D(%.=2!O``0B2'(`<``O\
  762. XM`@P0`"MG!@P0`"UF`E)($!@$```P;1(,```);@PD`>6!TH+2@=*`8.8,$0`M_
  763. XM9@)$@20?(`A3@"!O``@@@9")3G4O!RXO``A2K`&D(`<@;`&@$,`I2`&@+A]..
  764. XM=4Y5``!(YP`P)F\`$"1O`!1"K`&D*4L!H$AM`!`O"DAZ_\9.NOX^(&P!H$(0S
  765. XM("P!I$SM#`#_^$Y=3G5*@&H``!Y$@$J!:@``#$2!80``($2!3G5A```81(!$!
  766. XM@4YU2H%J```,1(%A```&1(!.=2\"2$$T`68``")(0$A!2$(T`&<```:$P3`"B
  767. XM2$`T`(3!,`)(0C(")!].=2\#=A`,00"`9```!N&944,,00@`9```!NF964,,=
  768. XM02``9```!N6954-*06L```;CF5-#-`#FJ$A"0D+FJDA#@,$V`#`"-`-(0<3!(
  769. XMD()D```(4T/0@63^<@`R`TA#Y[A(0,%!)A\D'TYU(&\`!")(<@!P`!`8!```X
  770. XM,&TH#```"6\<!```$6T<#```!6\,!```(&T0#```!6X*!@``"NF!TH!@T"`(=
  771. XD4X`@;P`(((&0B4YU(&\`!""(6)!"J``$(4@`"$YU``````/RA
  772. X``
  773. Xend
  774. Xsize 9396
  775. END_OF_FILE
  776. if test 13190 -ne `wc -c <'netkeys.uu'`; then
  777.     echo shar: \"'netkeys.uu'\" unpacked with wrong size!
  778. fi
  779. # end of 'netkeys.uu'
  780. fi
  781. echo shar: End of archive 2 \(of 2\).
  782. cp /dev/null ark2isdone
  783. MISSING=""
  784. for I in 1 2 ; do
  785.     if test ! -f ark${I}isdone ; then
  786.     MISSING="${MISSING} ${I}"
  787.     fi
  788. done
  789. if test "${MISSING}" = "" ; then
  790.     echo You have unpacked both archives.
  791.     rm -f ark[1-9]isdone
  792. else
  793.     echo You still need to unpack the following archives:
  794.     echo "        " ${MISSING}
  795. fi
  796. ##  End of shell archive.
  797. exit 0
  798. -- 
  799. Mail submissions (sources or binaries) to <amiga@cs.odu.edu>.
  800. Mail comments to the moderator at <amiga-request@cs.odu.edu>.
  801. Post requests for sources, and general discussion to comp.sys.amiga.
  802.